home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / telecomm / bbs / bbsquick83.lha / bbsQUICK.rexx < prev    next >
Encoding:
OS/2 REXX Batch file  |  1994-12-30  |  50.0 KB  |  1,958 lines

  1. /*      $VER: bbsQUICK.rexx 8.3 (11.12.94)
  2.      copyright © 1993-94 Richard Lee Stockton
  3. FREELY DISTRIBUTABLE AS LONG AS THIS NOTICE REMAINS
  4.  
  5. requires: libs:rexxsyslib.library             c:LhA
  6.           libs:rexxsupport.library            c:join
  7.           libs:rexxarplib.library             c:copy
  8.           libs:rexxmathlib.library            c:delete
  9.           libs:screenshare.library            c:version
  10.           libs:arp.library
  11.  
  12.  - Preferences -
  13. prefs.0 = color data
  14. prefs.1 = work dir
  15. prefs.2 = download dir
  16. prefs.3 = upload dir
  17. prefs.4 = editor
  18. prefs.5 = signature file  - Added by S.Griffiths 1/8/94
  19. prefs.6 = interlace: 0=OFF or 1=ON
  20. */
  21.  
  22. IF SHOW('P','QUICKHOST') THEN
  23.   DO
  24.     ADDRESS QUICKPORT FRONT
  25.     EXIT 0
  26.   END
  27. IF ~SHOW('L','rexxsupport.library') THEN
  28.   CALL ADDLIB('rexxsupport.library',0,-30,0)
  29. IF ~SHOW('L','rexxarplib.library') THEN
  30.   CALL ADDLIB('rexxarplib.library',0,-30,0)
  31.  
  32. prefs.=''
  33. laceflag=0
  34. resetflag=1
  35.  
  36. RESET:
  37. CALL setup()
  38.  
  39. IF EXISTS(prefspath) & resetflag THEN SIGNAL START
  40.  
  41. START_PREFS:
  42. p.title=CENTER('Please Enter Your Preferences',44)
  43. CALL OpenWindow(QUICKHOST,120,20,400,170,w.idcmp,w.flags,p.title)
  44.  
  45. CALL AddMenu(QUICKHOST,'Preferences    ')
  46. CALL AddItem(QUICKHOST,' Help','HELP','H')
  47. CALL AddItem(QUICKHOST,' Colors ...','COLORS','C')
  48. CALL AddItem(QUICKHOST,' Signature','SIG')
  49. CALL AddItem(QUICKHOST,' Interlace','LACE','I')
  50. CALL AddItem(QUICKHOST,' Load ...','LOAD','L')
  51. CALL AddItem(QUICKHOST,' Save ...','SAVE',';')
  52. CALL AddItem(QUICKHOST,' Use','USE','U')
  53. CALL AddItem(QUICKHOST,' Cancel','CLOSEWINDOW','Q')
  54. CALL AddItem(QUICKHOST,' About','ABOUT')
  55.  
  56. pp.1='Work Dir:'
  57. pp.2='Download Dir:'
  58. pp.3='Upload Dir:'
  59. pp.4='Editor:'
  60. pp.5='Signature:'
  61. p.=''
  62. DO i=0 TO 9
  63.   p.i=prefs.i
  64. END
  65. DO i=1 TO 5
  66.   CALL SETAPEN(QUICKHOST,1)
  67.   CALL MOVE(QUICKHOST,18,29+17*i)
  68.   CALL TEXT(QUICKHOST,RIGHT(pp.i,16))
  69.   CALL AddGadget(QUICKHOST,158,23+17*i,i,p.i,'PREFS' i '%g',220,RIDGEBORDER)
  70. END
  71.  
  72. CALL AddGadget(QUICKHOST, 40,150,4,' Save ','SAVE')
  73. CALL AddGadget(QUICKHOST,180,150,5,' Use ','USE')
  74. CALL AddGadget(QUICKHOST,300,150,6,' Cancel ','CLOSEWINDOW')
  75. CALL AddGadget(QUICKHOST, 30,16,7,' HELP ','HELP')
  76. CALL AddGadget(QUICKHOST,110,16,8,' Load ','LOAD')
  77. CALL AddGadget(QUICKHOST,190,16,9,' Colors ','COLORS')
  78. CALL AddGadget(QUICKHOST,286,16,10,' Signature ','SIG')
  79. CALL AddGadget(QUICKHOST,57,132,11,' Interlace ','LACE')
  80. IF laceflag THEN CALL SetGadget(QUICKHOST,11,'ON')
  81.  
  82. CALL tofront(QUICKHOST)
  83. CALL box(QUICKHOST,1,1,11,30,378,95)
  84. CALL SetAPen(QUICKHOST,3)
  85. CALL Flood(QUICKHOST,1,5,15)
  86. lastgad=1
  87. CALL SCREENTOFRONT(QUICKSCREEN)
  88. CALL SetAPen(QUICKHOST,1)
  89. DO FOREVER
  90.   CALL ActivateGadget(QUICKHOST,lastgad)
  91.   t=waitpkt(QUICKPORT)
  92.   DO ff=1
  93.     p=GETPKT(QUICKPORT)
  94.     IF c2d(p)=0 THEN LEAVE ff
  95.     command=GETARG(p)
  96.     PARSE VAR command arg1' 'arg2' 'arg3
  97.     t=REPLY(p,0)
  98.     SELECT
  99.       WHEN arg1='LOAD' THEN CALL config('LOAD')
  100.       WHEN arg1='SAVE' | arg1='USE' | arg1='CLOSEWINDOW' THEN
  101.         DO
  102.           DO i=1 TO 9 WHILE arg1~='CLOSEWINDOW'
  103.             prefs.i=p.i
  104.           END
  105.           CALL LOADSIG()
  106.           CALL MAKEDIR(prefs.1)
  107.           CALL PRAGMA('D',prefs.1)
  108.           arcdir=makepath(prefs.3,'OUT')
  109.           CALL MAKEDIR(arcdir)
  110.           IF arg1='SAVE' THEN CALL config('SAVE')
  111.           CALL CloseWindow(QUICKHOST,'CONTINUE')
  112.           resetflag=1
  113.           SIGNAL START
  114.         END
  115.       WHEN arg1='LACE' THEN
  116.         DO
  117.           IF p.6=1 THEN
  118.             DO
  119.               prefs.6=0
  120.               laceflag=0
  121.               CALL SetGadget(QUICKHOST,11,'OFF')
  122.             END
  123.           ELSE
  124.             DO
  125.               prefs.6=1
  126.               laceflag=1
  127.               CALL SetGadget(QUICKHOST,11,'ON')
  128.             END
  129.           CALL Stop(QUICKHOST)
  130.           CALL CloseScreen(QUICKSCREEN)
  131.           resetflag=0
  132.           SIGNAL RESET
  133.         END
  134.       WHEN arg1='HELP' THEN CALL Request(,,prefshelp,,,,QUICKSCREEN)
  135.       WHEN arg1='ABOUT' THEN CALL Request(200,45,abouttext,,,,QUICKSCREEN)
  136.       WHEN arg1='PREFS' THEN
  137.         DO
  138.           n=arg2
  139.           p.n=arg3
  140.           n=n+1
  141.           IF n>6 THEN n=1
  142.           lastgad=n
  143.         END
  144.       WHEN arg1='COLORS' THEN
  145.         /* INTERPRET */ ADDRESS AREXX Palette.rexx QUICKSCREEN 4 QUICKPORT 
  146.       WHEN arg1='NEW_COLORS' THEN p.0=new_colors()
  147.       WHEN arg1='SIG' THEN CALL edit_sig()
  148.       WHEN arg1='MOUSEBUTTONS' THEN NOP
  149.       WHEN arg1='SELECTUP' THEN NOP
  150.       WHEN arg1='CONTINUE' THEN NOP
  151.       OTHERWISE CALL Request(,100,command,,,,QUICKSCREEN)
  152.     END
  153.   END
  154. END
  155.  
  156.  
  157. START:
  158. projects=SHOWDIR(prefs.1)
  159. IF WORDS(projects)=1 THEN
  160.   DO
  161.     arcdir=makepath(prefs.3,'OUT/'projects)
  162.     CALL MAKEDIR(arcdir)
  163.     workdir=makepath(prefs.1,projects)
  164.     CALL MAKEDIR(workdir)
  165.     CALL PRAGMA('D',workdir)
  166.   END
  167. ELSE IF projects~='' THEN CALL newarea()
  168.  
  169. IF EXISTS('.ID') THEN CALL read_ID()
  170. ELSE IF projects~='' THEN CALL openarc()
  171.  
  172. RESTART:
  173. IF mode=0 THEN w.title='Notices and Information'
  174. IF mode=1 THEN w.title='Private EMail Messages'
  175. IF mode=2 THEN w.title='New Conferences Messages'
  176. IF mode=3 THEN w.title='Public Message Conferences'
  177. IF mode=4 THEN w.title='New File Descriptions'
  178. IF mode=5 THEN w.title='Public File Libraries'
  179. p.title=''
  180. w.title=RIGHT(bbsname w.title,75)
  181. CALL OpenWindow(QUICKHOST,,9,w.cols,w.rows-8,w.idcmp,w.flags,w.title)
  182. CALL SetFont(QUICKHOST,'topaz.font',8)
  183.  
  184. CALL AddMenu(QUICKHOST,'Project       ')
  185. CALL AddItem(QUICKHOST,' New','NEW')
  186. CALL AddItem(QUICKHOST,' Open ...','OPEN','O')
  187. CALL AddItem(QUICKHOST,' Archive','ARC','A')
  188. CALL AddItem(QUICKHOST,' Edit','EDIT','E')
  189. CALL AddItem(QUICKHOST,' Info','INFO','I')
  190. CALL AddItem(QUICKHOST,' About','ABOUT')
  191. CALL AddItem(QUICKHOST,' Quit','CLOSEWINDOW','Q')
  192.  
  193. CALL AddMenu(QUICKHOST,'Movement            ')
  194. CALL AddItem(QUICKHOST,' Line Forward','LINE UP','.')
  195. CALL AddItem(QUICKHOST,' Line Back','LINE BACK',',')
  196. CALL AddItem(QUICKHOST,' Page Forward','PAGE UP','F')
  197. CALL AddItem(QUICKHOST,' Page Back','PAGE BACK','B')
  198. CALL AddItem(QUICKHOST,' Zip to Beg/End','PAGE ZIP','Z')
  199.  
  200. CALL AddMenu(QUICKHOST,'Commands      ')
  201. CALL AddItem(QUICKHOST,' Mode ...','CONTINUE')
  202. CALL AddSubItem(QUICKHOST,'   Notices','MODE 0','1',62)
  203. CALL AddSubItem(QUICKHOST,'   EMail','MODE 1','2',61)
  204. CALL AddSubItem(QUICKHOST,'   Messages','MODE 2','3',59)
  205. CALL AddSubItem(QUICKHOST,'   Conferences','MODE 3','4',55)
  206. CALL AddSubItem(QUICKHOST,'   FileList','MODE 4','5',47)
  207. CALL AddSubItem(QUICKHOST,'   Libraries','MODE 5','6',31)
  208. CALL AddItem(QUICKHOST,' Print','PRINT','[')
  209. CALL AddItem(QUICKHOST,' Search','SEARCH','S')
  210. IF mode=1 & level>sysoplevel THEN CALL AddItem(QUICKHOST,' User','USER','')
  211. IF mode<2 THEN
  212.   DO
  213.     CALL AddItem(QUICKHOST,' Delete','KILL','K')
  214.     CALL AddItem(QUICKHOST,' Save As','SAVEAS','S')
  215.   END
  216. IF mode<3 THEN
  217.   DO
  218.     CALL AddItem(QUICKHOST,' Previous','NEXT BACK','P')
  219.     CALL AddItem(QUICKHOST,' Next','NEXT FORWARD','N')
  220.   END
  221. IF mode=1 | mode=2 | mode=3 THEN
  222.     CALL AddItem(QUICKHOST,' Write','WRITE','W')
  223. IF mode=4 THEN
  224.   DO
  225.     CALL AddItem(QUICKHOST,' Download','DOWNLOAD','D')
  226.     IF level>=sysoplevel THEN
  227.       DO
  228.         CALL AddItem(QUICKHOST,' Kill','DELETE')
  229.         CALL AddItem(QUICKHOST,' Change','CHANGE')
  230.       END
  231.     IF WORDS(SHOWDIR(makepath(workdir,'EmailFiles')'/'name))>0 THEN
  232.       CALL AddItem(QUICKHOST,' EmailFiles','EFILES','E')
  233.   END
  234. IF mode=5 THEN CALL AddItem(QUICKHOST,' Upload','UPLOAD','U')
  235. CALL SetItem(QUICKHOST,2,0,mode,'ON')
  236.  
  237. CALL AddMenu(QUICKHOST,'Preferences     ')
  238. CALL AddItem(QUICKHOST,' Set ...','CONFIG SET','/')
  239. CALL AddItem(QUICKHOST,' Load ...','CONFIG LOAD','L')
  240. CALL AddItem(QUICKHOST,' Save ...','CONFIG SAVE',';')
  241. CALL AddItem(QUICKHOST,' Colors ...','COLORS','C')
  242.  
  243. IF mode<3 THEN
  244.   DO
  245.     CALL AddGadget(QUICKHOST,110,14,2,' Previous ','NEXT BACK')
  246.     CALL AddGadget(QUICKHOST,210,14,3,' Next ','NEXT FORWARD')
  247.   END
  248. IF mode=1 | mode=2 | mode=3 THEN
  249.   CALL AddGadget(QUICKHOST,20,14,1,' Write ','WRITE')
  250. IF mode=4 THEN
  251.   DO
  252.     CALL AddGadget(QUICKHOST,14,14,1,' Download ','DOWNLOAD')
  253.     IF level>=sysoplevel THEN
  254.       CALL AddGadget(QUICKHOST,108,14,2,' Kill ','DELETE')
  255.     IF WORDS(SHOWDIR(makepath(workdir,'EmailFiles')'/'name))>0 THEN
  256.       CALL AddGadget(QUICKHOST,170,14,3,' EmailFiles ','EFILES')
  257.   END
  258. IF mode=5 THEN CALL AddGadget(QUICKHOST,20,14,1,' Upload ','UPLOAD')
  259. CALL AddGadget(QUICKHOST,w.cols-130,14,4,' Page Forward ','PAGE UP')
  260. CALL AddGadget(QUICKHOST,w.cols-235,14,5,' Page Back ','PAGE BACK')
  261. CALL AddGadget(QUICKHOST,280,14,6,CENTER(modetext.mode,13),'NEW_MODE')
  262. CALL SetGadget(QUICKHOST,6,'ON')
  263. CALL tofront(QUICKHOST)
  264. CALL boxes()
  265. CALL SetAPen(QUICKHOST,3)
  266. CALL Flood(QUICKHOST,1,5,15)
  267. CALL read_QUICK()
  268. IF mode=0 | mode=2 THEN CALL do_marked()
  269.  
  270.  
  271.                              /* Wait Loop */
  272. LOOP:
  273. CALL SCREENTOFRONT(QUICKSCREEN)
  274. CALL SetAPen(QUICKHOST,1)
  275. DO FOREVER
  276.   t=waitpkt(QUICKPORT)
  277.   DO ff=1
  278.     p=GETPKT(QUICKPORT)
  279.     IF c2d(p)=0 THEN LEAVE ff
  280.     command=GETARG(p)
  281.     PARSE VAR command arg1' 'arg2' 'arg3' 'arg4
  282.     t=REPLY(p,0)
  283.     SELECT
  284.       WHEN arg1='FRONT'        THEN CALL tofront(QUICKHOST)
  285.       WHEN arg1='NEW'          THEN CALL new()
  286.       WHEN arg1='OPEN'         THEN CALL openarc()
  287.       WHEN arg1='EDIT'         THEN CALL edit_request()
  288.       WHEN arg1='INFO'         THEN CALL info()
  289.       WHEN arg1='ABOUT'        THEN CALL Request(200,45,abouttext,,,,QUICKSCREEN)
  290.       WHEN arg1='CLOSEWINDOW'  THEN CALL ALL_DONE('')
  291.       WHEN arg1='LINE'         THEN CALL line(arg2)
  292.       WHEN arg1='PAGE'         THEN CALL page(arg2)
  293.       WHEN arg1='PRINT'        THEN CALL print()
  294.       WHEN arg1='WRITE'        THEN CALL write()
  295.       WHEN arg1='SEARCH'       THEN CALL searchreq()
  296.       WHEN arg1='NEXT'         THEN CALL nextitem(arg2)
  297.       WHEN arg1='UPLOAD'       THEN CALL upload()
  298.       WHEN arg1='DOWNLOAD'     THEN CALL do_action('Download')
  299.       WHEN arg1='DELETE'       THEN CALL do_action('Delete')
  300.       WHEN arg1='EFILES'       THEN CALL efiles()
  301.       WHEN arg1='USER'         THEN CALL user()
  302.       WHEN arg1='KILL'         THEN CALL kill()
  303.       WHEN arg1='SAVEAS'       THEN CALL saveas()
  304.       WHEN arg1='CHANGE'       THEN CALL do_action('Change')
  305.       WHEN arg1='ARC'          THEN CALL archive()
  306.       WHEN arg1='MODE'         THEN DO;mode=arg2;CALL whichmode(0);END
  307.       WHEN arg1='CONFIG'       THEN CALL config(arg2)
  308.       WHEN arg1='COLORS'       THEN
  309.         /* INTERPRET */ ADDRESS AREXX Palette.rexx QUICKSCREEN 4 QUICKPORT 
  310.       WHEN arg1='NEW_COLORS'   THEN prefs.0=new_colors()
  311.       WHEN arg1='NEW_MODE'     THEN CALL whichmode(1)
  312.       WHEN arg1='MOUSEBUTTONS' THEN NOP
  313.       WHEN arg1='SELECTUP'     THEN NOP
  314.       WHEN arg1='CONTINUE'     THEN NOP
  315.       OTHERWISE CALL Request(,100,command 'is not finished...',,,,QUICKSCREEN)
  316.     END
  317.   END
  318. END
  319. CALL ALL_DONE('This error should never occur.')
  320. EXIT
  321.  
  322.  
  323. /* Functions */
  324.  
  325. ALL_DONE:
  326. PARSE ARG air
  327. IF air~='' THEN
  328.   DO
  329.     CALL usermsg(air)
  330.     CALL waiting()
  331.   END
  332. IF WORDS(SHOWDIR(arcdir,'F'))>0 THEN
  333.   DO
  334.     temp='There are files ready to be archived for sending... Do it now?'
  335.     IF Request(,36,temp,,' NOW ',' LATER ',QUICKSCREEN)='OKAY' THEN
  336.       CALL archive()
  337.   END
  338. IF SHOW('P','QUICKHOST') THEN CALL Stop('QUICKHOST')
  339. CALL CloseScreen(QUICKSCREEN)
  340. EXIT
  341.  
  342.  
  343. do_marked:
  344. IF ~EXISTS('Marked') THEN RETURN
  345. x=OPEN(f,'Marked','R')
  346. IF x=0 THEN RETURN
  347. t=''
  348. t=STRIP(LEFT(READLN(f),74))
  349. DO i=2 TO 16
  350.   line=READLN(f)
  351.   IF EOF(f) THEN LEAVE i
  352.   t=t'\'STRIP(LEFT(line,74))
  353. END
  354. IF i>16 THEN t=t'\--- more ---'
  355. CALL CLOSE(f)
  356. IF Request(,,t,,' Don''t Tell Me Again ',' Thanks ',QUICKSCREEN)='OKAY' THEN
  357.   CALL DELETE('Marked')
  358. RETURN
  359.  
  360.  
  361. efiles:
  362. ef=SHOWDIR('EmailFiles/'name)
  363. IF ef="" THEN
  364.   DO
  365.     CALL usermsg('No emailfiles were found!')
  366.     CALL waiting()
  367.     RETURN
  368.   END
  369. ename=GetFile(150,16,makepath(workdir,'EmailFiles/'name),,'Select File To Move',QUICKSCREEN)
  370. IF ename='' | ~EXISTS(ename) THEN RETURN
  371. sname=SUBSTR(ename,LASTPOS('/',ename)+1)
  372. dname=GetFile(150,16,prefs.2,sname,'Select Destination',QUICKSCREEN)
  373. IF dname='' THEN RETURN
  374. IF WORD(STATEF(dname),1)='FILE' THEN
  375.   DO
  376.     IF Request(,36,dname 'exists! Replace it?',,' REPLACE ',' CANCEL ',QUICKSCREEN)='OKAY' THEN
  377.       CALL DELETE(dname)
  378.     ELSE RETURN
  379.   END
  380. ELSE IF ~EXISTS(dname) THEN
  381.   DO
  382.     dd=LASTPOS('/',dname)-1
  383.     IF dd<1 THEN dd=LASTPOS(':',dname)
  384.     ddir=LEFT(dname,dd)
  385.     IF WORD(STATEF(ddir),1)~='DIR' THEN
  386.       DO
  387.         CALL usermsg(ddir 'does not exist!')
  388.         CALL waiting()
  389.         RETURN
  390.       END
  391.   END
  392. ADDRESS COMMAND 'copy' ename dname
  393. CALL DELETE(ename)
  394. RETURN
  395.  
  396.  
  397. archive:
  398. IF WORDS(SHOWDIR(arcdir))=0 THEN
  399.   DO
  400.     CALL usermsg('Nothing To Archive!')
  401.     CALL waiting()
  402.     RETURN
  403.   END
  404. IF arcdir=makepath(prefs.3,'OUT') & WORDS(SHOWDIR(arcdir,'D'))>0 THEN
  405.   DO
  406.     dirs=SHOWDIR(arcdir,'D')
  407.     temp='Select BBS by number...\'
  408.     iii=0
  409.     DO ii=1 TO WORDS(dirs)
  410.       IF WORDS(SHOWDIR(makepath(arcdir,WORD(dirs,ii))))=0 THEN ITERATE ii
  411.       iii=iii+1
  412.       IF iii=16 & WORDS(dirs)>ii THEN
  413.         DO
  414.           temp=temp'\ - Too many to fit! -'
  415.           LEAVE ii
  416.         END
  417.       temp=temp'\'RIGHT(ii,2)'.' WORD(dirs,ii)
  418.     END
  419.     IF iii=0 THEN
  420.       DO
  421.         CALL usermsg('Nothing To Archive!')
  422.         CALL waiting()
  423.         RETURN
  424.       END
  425.     temp=Request(150,,temp,'',,' CANCEL ',QUICKSCREEN)
  426.     IF temp='' | ~DATATYPE(temp,'W') THEN RETURN
  427.     IF temp<1 | temp>WORDS(dirs) THEN RETURN
  428.     arcdir=makepath(arcdir,WORD(dirs,temp))
  429.     CALL archive()
  430.     RETURN
  431.   END
  432. arcname=GetFile(150,16,prefs.3,'To'bbsnym'.lha','Name This QUICKIN Archive',QUICKSCREEN)
  433. IF arcname='' THEN RETURN
  434. IF EXISTS(arcname) THEN
  435.   DO
  436.     IF Request(,36,arcname 'exists. Delete the old one?',,' DELETE ',' CANCEL ',QUICKSCREEN)='OKAY' THEN
  437.       CALL DELETE(arcname)
  438.     ELSE RETURN
  439.   END
  440. CALL usermsg('Building Archive' arcname'...')
  441. ADDRESS COMMAND 'CD' arcdir LF 'lha -2arq m' arcname '#?'
  442. CALL PostMsg()
  443. RETURN
  444.  
  445.  
  446. editor:
  447. PARSE ARG tname 
  448. IF prefs.4='' THEN prefs.4='Ed'
  449. clicomm='CD' arcdir LF prefs.4 tname
  450. IF ksversion>=37 & UPPER(prefs.4)='ED' THEN
  451.   clicomm=clicomm' WINDOW=CON:/2/'ScreenCols()'/'Screenrows()-2'/'QUICK'/C'
  452. CALL ScreenToBack(QUICKSCREEN)
  453. ADDRESS COMMAND clicomm
  454. CALL ScreenToFront(QUICKSCREEN)
  455. RETURN
  456.  
  457.  
  458. user:
  459. uc='User_Changes'
  460. RETURN
  461.  
  462.  
  463. saveas:
  464. temp=SUBSTR(tfile,LASTPOS('/',tfile)+1)
  465. x=GetFile(150,16,prefs.2,temp,'Copy to where?',QUICKSCREEN)
  466. IF x='' THEN RETURN
  467. ADDRESS COMMAND 'copy' makepath(workdir,tfile) x 'CLONE'
  468.  
  469. kill:
  470. IF mode=0 THEN
  471.   DO
  472.     IF Request(,36,'Delete' tfile'?',,' DELETE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  473.       RETURN
  474.     CALL DELETE(makepath(workdir,tfile))
  475.     noticecount=noticecount+1
  476.     CALL CloseWindow(QUICKHOST,'CONTINUE')
  477.     SIGNAL RESTART
  478.   END
  479. IF Request(,36,'Delete Email' email.emailcount'?',,' DELETE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  480.   RETURN
  481. IF DELETE(makepath(workdir,'Email/'name'/'email.emailcount)) THEN
  482.   DO
  483.     CALL usermsg('Deleting' email.emailcount'...')
  484.     email.emailcount=''
  485.     CALL nextitem('FORWARD')
  486.   END
  487. RETURN
  488.  
  489.  
  490. write:
  491. IF name='' THEN RETURN
  492. IF mode=1 THEN
  493.   DO
  494.     IF DATATYPE(email.0,'W') & email.emailcount~='' THEN
  495.       DO
  496.         IF LEFT(email.emailcount,3)='MSG' THEN
  497.           DO
  498.             IF Request(,100,'Return this message to the conferences?',,' YES ',' NO ',QUICKSCREEN)~='OKAY' THEN
  499.               RETURN
  500.             CALL usermsg('Returning' email.emailcount 'to message conferences...')
  501.             CALL MAKEDIR(arcdir'/MSG')
  502.             com='COPY' makepath(workdir,'Email/'name'/'email.emailcount)
  503.             com=com makepath(arcdir,'MSG')
  504.             mADDRESS COMMAND com
  505.             CALL DELETE(makepath(workdir,'Email/'name'/'email.emailcount))
  506.             CALL PostMsg()
  507.             IF Request(,100,'Edit this message?',,' YES ',' NO ',QUICKSCREEN)~='OKAY' THEN
  508.               RETURN
  509.             CALL editor('MSG/'email.emailcount)
  510.             RETURN
  511.           END
  512.         dot=LASTPOS('.',email.emailcount)
  513.         IF dot<1 THEN
  514.           DO
  515.             subj=''
  516.             toname=''
  517.             tonamecity=''
  518.           END
  519.         ELSE
  520.           DO
  521.             toname=LEFT(email.emailcount,dot-1)
  522.             tonamecity=SUBSTR(text.2,8)
  523.             subj=STRIP(LEFT(SUBSTR(text.4,8),66))
  524.           END
  525.       END
  526.     ELSE
  527.       DO
  528.         subj=''
  529.         toname=''
  530.         tonamecity=''
  531.       END
  532.     hdr.=''
  533.     hdr.1=' Mail: QUICK'
  534.     hdr.2=' From: 'name '-' city
  535.     temp=hdr.1'\'hdr.2'\   To:' tonamecity
  536.     x=Request(,90,temp,toname,,,QUICKSCREEN)
  537.     IF x='' THEN RETURN
  538.     x=SPACE(UPPER(cleanstring(x)),1,'_')
  539.     IF x='SYSOP' & sysop~='' THEN x=sysop
  540.     IF x~=toname THEN
  541.       DO
  542.         toname=check_alias(x)
  543.         tonamecity=toname
  544.       END
  545.     IF tonamecity='' THEN tonamecity=toname
  546.     hdr.3='   To: 'tonamecity
  547.     temp=hdr.1'\'hdr.2'\'hdr.3'\ Subj:'
  548.     subj=Request(,90,temp,subj,,,QUICKSCREEN)
  549.     IF subj='' THEN subj='?'
  550.     hdr.4=' Subj: 'subj
  551.     hdr.5=' Date: 'DATE('W') DATE() TIME('C')
  552.     hdr.6=RIGHT(WORD(SOURCELINE(1),4)'=====',74,'=')
  553.     temp=hdr.1'\'hdr.2'\'hdr.3'\'TRIM(LEFT(hdr.4,74))'\'hdr.5'\'hdr.6
  554.     IF Request(,90,temp,,' WRITE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  555.       RETURN
  556.     msgnum=get_number()
  557.     IF write_hdr(6) THEN RETURN
  558.     IF tonamecity~=toname THEN
  559.       DO
  560.         IF Request(,90,'Include Original Email From' toname '?',,' INCLUDE ',' LEAVE OUT ',QUICKSCREEN)='OKAY' THEN
  561.           DO
  562.             x=OPEN(f,txtfile,'W')
  563.             IF x=0 THEN
  564.               DO
  565.                 CALL usermsg(txtfile 'failed to open for writing!')
  566.                 CALL waiting()
  567.               END
  568.             ELSE
  569.               DO i=7 TO text.0
  570.                 CALL WRITELN(f,'>'text.i)
  571.               END
  572.             CALL CLOSE(f)
  573.           END
  574.       END
  575.     CALL INSERTSIG(txtfile) /* Check for a signature to add S.Griffiths 3/8/94 */
  576.     CALL editor(txtfile)
  577.     IF Request(,90,'Attach a file to this letter?',,' YES ',' NO ',QUICKSCREEN)~='OKAY' THEN
  578.       RETURN
  579.     mailfile=GetFile(150,16,prefs.3,,'Select file to attach.',QUICKSCREEN)
  580.     IF mailfile='' | ~EXISTS(mailfile) THEN RETURN
  581.     CALL MAKEDIR(arcdir'/Files')
  582.     ADDRESS COMMAND 'copy' mailfile arcdir'/Files'
  583.     hdr.1=hdr.1'    FILE:' getfilename(mailfile)
  584.     CALL write_hdr(6)
  585.     CALL usermsg('Mail will be sent to' toname'.')
  586.     CALL waiting()
  587.     RETURN
  588.   END
  589. IF mode=2 THEN
  590.   DO
  591.     n=Request(350,100,'Reply To What Message NUMBER?','',,' CANCEL ',QUICKSCREEN)
  592.     IF ~DATATYPE(n,'W') THEN RETURN
  593.     ln=search(1 '  Msg:' n)
  594.     IF ln=0 THEN
  595.       DO
  596.         CALL usermsg('Msg:' n 'not found in the' WORD(mess.0.1,messcount) 'Conference!')
  597.         CALL waiting()
  598.         RETURN
  599.       END
  600.     temp=text.ln
  601.     DO lnn=ln+1 TO ln+12
  602.       temp=temp'\'TRIM(LEFT(TRANSLATE(text.lnn,' ','\'),74))
  603.     END
  604.     IF Request(,,temp,,' REPLY ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN RETURN
  605.     lnn=ln+1
  606.     toname=WORD(text.lnn,2)
  607.     lnn=ln+3
  608.     subj=STRIP(LEFT(SUBSTR(text.lnn,8),66))
  609.     conf=WORD(mess.0.1,messcount)
  610.   END
  611. IF mode=3 THEN
  612.   DO
  613.     confnum=''
  614.     DO WHILE ~DATATYPE(confnum,'W')
  615.       confnum=Request(380,105,'Select Message\Conference by NUMBER','',,' CANCEL ',QUICKSCREEN)
  616.       IF confnum='' THEN RETURN
  617.     END
  618.     confnum=' 'confnum%1'.'
  619.     linenum=search(1 confnum)
  620.     IF linenum=0 THEN
  621.       DO
  622.         CALL usermsg('Unknown Message Conference number!')
  623.         CALL waiting()
  624.         RETURN
  625.       END
  626.     wordnum=FIND(text.linenum,confnum)+1
  627.     conf=WORD(text.linenum,wordnum)
  628.     toname=Request(200,100,'Post This Message To Who?','',,,QUICKSCREEN)
  629.     toname=SPACE(UPPER(cleanstring(toname)),1,'_')
  630.     IF toname='' THEN toname='ALL'
  631.     IF toname='SYSOP' & sysop~='' THEN toname=sysop
  632.     toname=check_alias(toname)
  633.     subj=''
  634.   END
  635. hdr.=''
  636. hdr.1='  Msg: QUICK'
  637. hdr.2=' From: 'name '-' city
  638. hdr.3='   To: 'toname
  639. IF mode=2 THEN hdr.3=hdr.3'   Msg' n
  640. temp=hdr.1'\'hdr.2'\'hdr.3'\ Subj:'
  641. subj=Request(,100,temp,subj,,,QUICKSCREEN)
  642. IF subj='' THEN subj='?'
  643. hdr.4=' Subj:' subj
  644. hdr.5=' Date:' DATE('W') DATE() TIME('C')
  645. hdr.5=LEFT(hdr.5,39) 'Conference:' conf
  646. hdr.6=RIGHT(WORD(SOURCELINE(1),4)'=====',74,'=')
  647. temp=hdr.1'\'hdr.2'\'hdr.3'\'TRIM(LEFT(hdr.4,74))'\'TRIM(LEFT(hdr.5,74))'\'hdr.6
  648. IF Request(,10,temp,,' WRITE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  649.   RETURN
  650. msgnum=get_number()
  651. IF write_hdr(6) THEN RETURN
  652. IF mode=1 & tonamecity~=toname THEN
  653.   DO
  654.     IF Request(,100,'Include Original Email From' toname '?',,' INCLUDE ',' LEAVE OUT ',QUICKSCREEN)='OKAY' THEN
  655.       DO
  656.         x=OPEN(f,txtfile,'W')
  657.         IF x=0 THEN
  658.           DO
  659.             CALL usermsg(txtfile 'failed to open for writing!')
  660.             CALL waiting()
  661.           END
  662.         ELSE
  663.           DO i=7 TO text.0
  664.             CALL WRITELN(f,'>'text.i)
  665.           END
  666.         CALL CLOSE(f)
  667.       END
  668.   END
  669. CALL INSERTSIG(txtfile)  /* Check for signature to add S.Griffiths 3/8/94 */
  670. CALL editor(txtfile)
  671. RETURN
  672.  
  673.  
  674. check_alias:
  675. PARSE ARG ali .
  676. IF ~DATATYPE(Friends.0,'W') THEN RETURN ali
  677. DO ii=1 TO Friends.0
  678.   IF UPPER(WORD(Friends.ii,1))=UPPER(ali) THEN RETURN WORD(Friends.ii,2)
  679. END
  680. RETURN ali
  681.  
  682.  
  683. write_hdr:
  684. ARG hdrlines 
  685. x=OPEN(f,hdrfile,'W')
  686. IF x=0 THEN
  687.   DO
  688.     CALL usermsg(hdrfile 'failed to open for writing!')
  689.     CALL waiting()
  690.     RETURN 1
  691.   END
  692. DO i=1 TO hdrlines
  693.   CALL WRITELN(f,hdr.i)
  694. END
  695. CALL CLOSE(f)
  696. RETURN 0
  697.  
  698.  
  699. get_number:
  700. DO i=.001 TO .999 BY .001
  701.   hdrfile=makepath(arcdir,RIGHT(i,3)'.HDR')
  702.   txtfile=makepath(arcdir,RIGHT(i,3)'.TXT')
  703.   IF ~EXISTS(hdrfile) THEN RETURN i
  704. END
  705. RETURN
  706.  
  707.  
  708. cleanstring:
  709. PARSE ARG cstr
  710. bot=TRIM(XRANGE(,' '))
  711. top=XRANGE('7B'x)
  712. cstr=STRIP(COMPRESS(cstr,bot||top))
  713. RETURN cstr
  714.  
  715.  
  716. upload:
  717. IF name='' THEN RETURN
  718. fullfile=GetFile(150,16,prefs.3,,'Select file to upload.',QUICKSCREEN)
  719. IF fullfile='' | ~EXISTS(fullfile) THEN RETURN
  720. finfo=STATEF(fullfile)
  721. namelen=22-LENGTH(WORD(finfo,2))
  722. ufile=getfilename(fullfile)
  723. ufile=COMPRESS(cleanstring(ufile),'()#?*;=')  /* remove DOS reserved chars */
  724. DO test=1
  725.   IF LENGTH(ufile)<=namelen THEN LEAVE test
  726.   temp='Your filename,' ufile', is' LENGTH(ufile)-namelen 'character'
  727.   IF (LENGTH(ufile)-namelen)>1 THEN temp=temp's'
  728.   temp=temp 'too long!'
  729.   temp=temp'\Please enter new filename:'
  730.   ufile=Request(100,120,temp,ufile,,' CANCEL ',QUICKSCREEN)
  731.   ufile=COMPRESS(cleanstring(ufile),'()#?*;=')
  732.   IF ufile='' THEN RETURN
  733. END
  734. libnum=''
  735. DO WHILE ~DATATYPE(libnum,'W')
  736.   libnum=Request(380,115,'Select Library by NUMBER','',,' CANCEL ',QUICKSCREEN)
  737.   IF libnum='' THEN RETURN
  738. END
  739. libnum=' 'libnum%1'.'
  740. linenum=search(1 libnum)
  741. IF linenum=0 THEN
  742.   DO
  743.     CALL usermsg('Unknown library number!')
  744.     CALL waiting()
  745.     RETURN
  746.   END
  747. wordnum=FIND(text.linenum,libnum)+1
  748. filedir=WORD(text.linenum,wordnum)
  749. temp='FileName:' ufile
  750. temp=temp'\ Library:' filedir'\'
  751. temp=temp'\Please Enter Keywords'
  752. temp=temp'\(or a condensed description)'
  753. temp=temp'\32 characters MAXIMUM...........|'
  754. keywords=''
  755. DO WHILE keywords=''
  756.   keywords=Request(,36,temp,'',,,QUICKSCREEN)
  757. END
  758. keywords=STRIP(LEFT(cleanstring(keywords),32))
  759. bytes=WORD(STATEF(fullfile),2)
  760. hdr.=''
  761. hdr.1='File: QUICK   KeyWords:' keywords
  762. hdr.2='Name: 'LEFT(ufile,27)' Size: 'bytes' bytes   Downloads: 0'
  763. hdr.3='From: 'LEFT(name,27)' Date: 'DATE() TIME('C')'  Lib: 'filedir
  764. hdr.4=RIGHT(WORD(SOURCELINE(1),4)'=====',74,'=')
  765. msgnum=get_number()
  766. temp=hdr.1'\'hdr.2'\'TRIM(LEFT(hdr.3,74))'\'hdr.4
  767. IF Request(,100,'Add a longer file description?',,' YES ',' NO ',QUICKSCREEN)='OKAY' THEN
  768.   DO
  769.     CALL editor(txtfile)
  770.     CALL DELAY(50)
  771.     x=OPEN(f,txtfile,'R')
  772.     IF x~=0 THEN
  773.       DO
  774.         DO p=1 TO 9
  775.           line=TRIM(LEFT(READLN(f),74))
  776.           IF EOF(f) THEN LEAVE p
  777.           temp=temp'\'line
  778.         END
  779.         CALL CLOSE(f)
  780.       END
  781.   END
  782. IF Request(,36,temp,,' UPLOAD ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  783.   DO
  784.     CALL DELETE(txtfile)
  785.     CALL DELETE(hdrfile)
  786.     RETURN
  787.   END
  788. IF write_hdr(4) THEN RETURN
  789. udir=makepath(arcdir,'Files')
  790. CALL MAKEDIR(udir)
  791. ADDRESS COMMAND 'copy' fullfile udir'/'ufile
  792. temp='If' ufile 'replaces\a previous upload of yours,\'
  793. temp=temp'please enter the file number\of that previous upload.'
  794. n=Request(150,36,temp,'',,' CANCEL ',QUICKSCREEN)
  795. IF ~DATATYPE(n,'W') THEN RETURN
  796. action='Delete'
  797.  
  798. add_number:
  799. fname=arcdir'/File_Requests'
  800. IF action='Delete' THEN fname=arcdir'/File_Deletes'
  801. IF EXISTS(fname) THEN x=OPEN(f,fname,'A')
  802. ELSE x=OPEN(f,fname,'W')
  803. IF x=0 THEN 
  804.   DO
  805.     CALL usermsg(fname 'failed to open for writing!')
  806.     CALL waiting()
  807.     RETURN
  808.   END
  809. CALL WRITELN(f,n)
  810. CALL CLOSE(f)
  811. CALL usermsg('File number' n 'added to' action 'request list.')
  812. CALL waiting()
  813. RETURN
  814.  
  815.  
  816. do_action:
  817. PARSE ARG action 
  818. IF name='' THEN RETURN
  819. n=Request(150,100,'Enter File To' action 'by NUMBER','',,' CANCEL ',QUICKSCREEN)
  820. IF n='' THEN RETURN
  821. IF ~DATATYPE(n,'W') THEN
  822.   DO
  823.     CALL usermsg(action 'requests MUST be made by file NUMBER only!')
  824.     RETURN
  825.   END
  826. ln=search(1 'FILE:' n)
  827. IF ln=0 THEN
  828.   temp='File:' n 'not found in current list\Include in the' action 'Request anyway?'
  829. ELSE
  830.   DO
  831.     lnn=ln+1
  832.     lnnn=ln+2
  833.     temp=text.ln'\'text.lnn'\'TRIM(LEFT(text.lnnn,74))
  834.   END
  835. IF Request(,100,temp,,' 'UPPER(action)' ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN RETURN
  836. IF action~='Change' THEN
  837.   DO
  838.     CALL add_number()
  839.     RETURN
  840.   END
  841. IF sysoplevel>level THEN RETURN
  842. temp3=' ^ indicates no change from the original data in that position.\\'
  843. IF ln>0 THEN temp3=temp'\\'temp3
  844. hdr.=''
  845. hdr.1='File:' n'   KeyWords: ^'
  846. hdr.2='Name: 'LEFT('^',27)' Size: ^ bytes   Downloads: ^'
  847. hdr.3='From: 'LEFT('^',27)' Date: ^ ^ ^ ^  Lib: ^'
  848. hdr.4=RIGHT(WORD(SOURCELINE(1),4)'=====',74,'=')
  849. temp=''
  850. IF ln>0 THEN PARSE VAR text.ln . 'KeyWords: 'temp
  851. x=Request(,20,'Change KeyWords',temp,,' NO ',QUICKSCREEN)
  852. IF x~='' & x~=temp THEN hdr.1='File:' n'   KeyWords:' STRIP(LEFT(x,32))
  853. temp=''
  854. IF ln>0 THEN PARSE VAR text.lnn 'Name: 'temp .
  855. DO test=1
  856.   x=Request(,20,temp3||hdr.1'\\Change FileName',temp,,' NO ',QUICKSCREEN)
  857.   IF x=temp | LENGTH(x)<17 THEN LEAVE test
  858.   CALL usermsg('Your filename is' LENGTH(x)-16 'characters too long!')
  859.   CALL waiting()
  860. END
  861. IF x~='' & x~=temp THEN hdr.2='Name: 'LEFT(x,27)' Size: ^ bytes   Downloads: ^'
  862. temp=''
  863. IF ln>0 THEN PARSE VAR text.lnnn 'From: 'temp .
  864. x=Request(,20,temp3||hdr.1'\'hdr.2'\\Change Uploader',temp,,' NO ',QUICKSCREEN)
  865. IF x~='' & x~=temp THEN hdr.3='From: 'LEFT(x,27)' Date: 'DATE() TIME('C')'  Lib: ^'
  866. temp=''
  867. IF ln>0 THEN PARSE VAR text.lnnn . 'Lib: 'temp
  868. PARSE VAR hdr.3 'From:' temp2 .
  869. x=Request(,20,temp3||hdr.1'\'hdr.2'\'TRIM(LEFT(hdr.3,74))'\\Change Library',temp,,' NO ',QUICKSCREEN)
  870. IF x~='' & x~=temp THEN
  871.   hdr.3='From: 'LEFT(temp2,27)' Date: 'DATE() TIME('C')'  Lib:' x
  872. msgnum=get_number()
  873. IF Request(,20,'Edit the longer file description?',,' YES ',' NO ',QUICKSCREEN)='OKAY' THEN
  874.   DO
  875.     IF ln>0 THEN
  876.       DO
  877.         ii=ln+5
  878.         IF text.ii~='=====' & text.0>=ii THEN
  879.           DO
  880.             x=OPEN(f,txtfile,'W')
  881.             IF x~=0 THEN
  882.               DO ii=ln+4 WHILE text.ii~='=====' & text.0>=ii
  883.                 CALL WRITELN(f,text.ii)
  884.               END
  885.             CALL CLOSE(f)
  886.             CALL DELAY(28)
  887.           END
  888.       END
  889.     CALL editor(txtfile)
  890.   END
  891. temp=temp3||hdr.1'\'hdr.2'\'TRIM(LEFT(hdr.3,74))'\'hdr.4
  892. IF Request(,20,temp,,' CHANGE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  893.   DO
  894.     CALL DELETE(txtfile)
  895.     CALL DELETE(hdrfile)
  896.     RETURN
  897.   END
  898. CALL write_hdr(4)
  899. RETURN
  900.  
  901.  
  902. searchreq:
  903. x=Request(350,100,'Search Phrase?','',,' CANCEL ',QUICKSCREEN)
  904. IF x='' THEN RETURN
  905. num=search(0 x)
  906. IF num=0 THEN
  907.   DO
  908.     CALL usermsg(x 'was not found!')
  909.     CALL waiting()
  910.   END
  911. ELSE CALL show_QUICK(num)
  912. RETURN
  913.  
  914.  
  915. search:
  916. ARG flag' 'searcharg
  917. DO si=1 TO text.0
  918.   IF POS(searcharg,UPPER(text.si))>0 THEN
  919.     DO
  920.       IF flag & LEFT(text.si,1)='>' THEN ITERATE si
  921.       RETURN si
  922.     END
  923. END
  924. RETURN 0
  925.  
  926.  
  927. print:
  928. temp=modetext.mode
  929. IF mode=1 THEN temp=email.emailcount 'Email'
  930. IF mode=2 THEN temp=WORD(mess.0.1,messcount) 'Conference'
  931. pdev=Request(150,100,'Print' temp 'To:','PRT:',,' CANCEL ',QUICKSCREEN)
  932. IF pdev='' THEN RETURN
  933. x=OPEN(p,pdev,'W')
  934. IF x=0 THEN
  935.   DO
  936.     CALL usermsg(pdev 'failed to open for printing!')
  937.     CALL waiting()
  938.     RETURN
  939.   END
  940. DO i=1 TO text.0
  941.   CALL WRITELN(p,text.i)
  942. END
  943. CALL CLOSE(p)
  944. RETURN
  945.  
  946.  
  947. newarea:
  948. x=GetFile(150,36,prefs.1,,'Select BBS...',QUICKSCREEN)
  949. IF x='' | ~EXISTS(x) THEN RETURN
  950. finfo=STATEF(x)
  951. IF WORD(finfo,1)='FILE' THEN x=getdir(x)
  952. CALL MAKEDIR(x)
  953. IF ~EXISTS(x) THEN RETURN
  954. workdir=x
  955. CALL PRAGMA('D',workdir)
  956. arcdir=makepath(prefs.3,'OUT/'getfilename(workdir))
  957. CALL MAKEDIR(arcdir)
  958. CALL read_ID()
  959. RETURN
  960.  
  961.  
  962. new:
  963. IF Request(150,100,'Clear this area or change areas?',,' CLEAR ',' NEW BBS ',QUICKSCREEN)='OKAY' THEN
  964.   DO
  965.     CALL usermsg('Clearing work area...')
  966.     CALL clear()
  967.     CALL read_ID()
  968.   END
  969. ELSE CALL newarea()
  970. CALL CloseWindow(QUICKHOST,'CONTINUE')
  971. SIGNAL RESTART
  972. RETURN
  973.  
  974.  
  975. reset_vars:
  976. friends.=''
  977. text.=''
  978. mess.=''
  979. name=''
  980. city=''
  981. bbsname=''
  982. sysop=''
  983. keys=''
  984. mode=0
  985. notices=''
  986. level=0
  987. sysoplevel=99
  988. arcdate=''
  989. RETURN
  990.  
  991.  
  992. clear:
  993. CALL reset_vars()
  994. emdir=''
  995. efdir=''
  996. wemdir=''
  997. wefdir=''
  998. notices=''
  999. ndir=''
  1000. IF EXISTS('Notices') THEN ndir='Notices/#? Notices'
  1001. IF EXISTS('Email') THEN
  1002.   DO
  1003.     emdir=SHOWDIR('Email')
  1004.     emdir=makepath('Email',WORD(emdir,1))
  1005.     wemdir=emdir'/#?'
  1006.     emdir=emdir 'Email'
  1007.   END
  1008. IF EXISTS('EmailFiles') THEN
  1009.   DO
  1010.     efdir=SHOWDIR('EmailFiles')
  1011.     efdir=makepath('EmailFiles',WORD(efdir,1))
  1012.     wefdir=efdir'/#?'
  1013.     efdir=efdir 'EmailFiles'
  1014.   END
  1015. IF ndir~='' | wemdir~='' | wefdir~='' | emdir~='' | efdir~='' THEN
  1016.   DO
  1017.     comm='CD' workdir LF 'delete' ndir wemdir wefdir emdir efdir 'QUIET'
  1018.     ADDRESS COMMAND comm
  1019.   END
  1020. CALL DELETE('Messages')
  1021. IF EXISTS('Mess1') THEN
  1022.   DO i=1 WHILE EXISTS('Mess'i)
  1023.     CALL DELETE('Mess'i)
  1024.   END
  1025. CALL DELETE('FileList')
  1026. IF EXISTS('List1') THEN
  1027.   DO i=1 WHILE EXISTS('List'i)
  1028.     CALL DELETE('List'i)
  1029.   END
  1030. RETURN
  1031.  
  1032.  
  1033. openarc:
  1034. arcfile=GetFile(150,16,prefs.2,'QUICK_','Select archive to process.',QUICKSCREEN)
  1035. IF arcfile='' THEN RETURN
  1036. CALL usermsg('Processing archive' arcfile' ...')
  1037. newname=name
  1038. newbbs=bbsname
  1039. comm='CD RAM:' LF 'lha -q x' arcfile '.ID'
  1040. ADDRESS COMMAND comm
  1041. x=OPEN(f,'RAM:.ID','R')
  1042. IF x=0 THEN
  1043.   DO
  1044.     CALL usermsg(arcfile 'is not a BBBBS QUICKOUT archive!')
  1045.     CALL waiting()
  1046.     RETURN
  1047.   END
  1048. newname=SUBSTR(READLN(f),8)
  1049. CALL READLN(f)
  1050. newbbs=SUBSTR(READLN(f),8)
  1051. CALL CLOSE(f)
  1052. newbbsnym=STRIP(LEFT(COMPRESS(newbbs," '/:;."),12))
  1053. workdir=makepath(prefs.1,newbbsnym)
  1054. CALL MAKEDIR(workdir)
  1055. CALL PRAGMA('D',workdir)
  1056. CALL DELETE('RAM:.ID')
  1057. aflag=1
  1058. IF EXISTS('Messages') & newname=name & newbbs=bbsname THEN
  1059.   DO
  1060.     IF Request(200,100,'Append Old Messages To New?',,' APPEND ',' CLEAR ',QUICKSCREEN)='OKAY' THEN
  1061.       DO
  1062.         CALL RENAME('Messages','Mess0')
  1063.         aflag=0
  1064.       END
  1065.     ELSE
  1066.       DO
  1067.         CALL DELETE('Messages')
  1068.         mess.=''
  1069.       END
  1070.   END
  1071. IF EXISTS('FileList') & newname=name & newbbs=bbsname THEN
  1072.   DO
  1073.     IF Request(200,100,'Append Old FileList To New?',,' APPEND ',' CLEAR ',QUICKSCREEN)='OKAY' THEN
  1074.       DO
  1075.         CALL RENAME('FileList','List0')
  1076.         aflag=0
  1077.       END
  1078.     ELSE CALL DELETE('FileList')
  1079.   END
  1080. CALL usermsg('Processing archive' arcfile' ...')
  1081. IF aflag THEN CALL clear()
  1082. comm='CD' workdir LF 'lha -q x' arcfile
  1083. ADDRESS COMMAND comm
  1084. IF EXISTS('Mess0') THEN
  1085.   DO
  1086.     mess.=''
  1087.     IF EXISTS('Messages') THEN
  1088.       DO
  1089.         CALL RENAME('Mess0','Mess1')
  1090.         CALL RENAME('Messages','Mess2')
  1091.         ADDRESS COMMAND 'CD' workdir||LF'JOIN Mess2 Mess1 AS Mess0'
  1092.         IF RC=0 THEN
  1093.           DO
  1094.             CALL DELETE('Mess1')
  1095.             CALL DELETE('Mess2')
  1096.           END
  1097.       END
  1098.     CALL RENAME('Mess0','Messages')
  1099.   END
  1100. IF EXISTS('List0') THEN
  1101.   DO
  1102.     IF EXISTS('FileList') THEN
  1103.       DO
  1104.         CALL RENAME('List0','List1')
  1105.         CALL RENAME('FileList','List2')
  1106.       END
  1107.   END
  1108. IF EXISTS('List1') THEN
  1109.   DO
  1110.     alist=''
  1111.     DO i=1 WHILE EXISTS('List'i)
  1112.       alist=STRIP(alist 'List'i)
  1113.     END
  1114.     ADDRESS COMMAND 'CD' workdir||LF'JOIN' alist 'AS List0' 
  1115.     IF RC=0 THEN
  1116.       DO i=1 WHILE EXISTS('List'i)
  1117.         CALL DELETE('List'i)
  1118.       END
  1119.   END
  1120. CALL RENAME('List0','FileList')
  1121. CALL read_ID()
  1122. CALL load_notices()
  1123. CALL sort_email()
  1124. dups.=''
  1125. dups.0=email.0
  1126. indx=1
  1127. DO i=1 TO email.0-1
  1128.   IF LEFT(email.i,3)='MSG' THEN email.i=''
  1129.   n=LASTPOS('.',email.i)
  1130.   IF n=0 THEN email.i=''
  1131.   IF email.i='' THEN ITERATE i
  1132.   thismail=LEFT(email.i,n)
  1133.   DO j=i+1 TO email.0
  1134.     n=LASTPOS('.',email.j)
  1135.     IF n=0 THEN email.j=''
  1136.     IF email.j='' THEN ITERATE i
  1137.     thatmail=LEFT(email.j,n)
  1138.     IF thatmail=thismail THEN
  1139.       DO
  1140.         dups.i=email.j dups.i
  1141.         email.j=''
  1142.       END
  1143.   END
  1144. END
  1145. DO i=1 TO dups.0
  1146.   IF dups.i='' THEN ITERATE i
  1147.   dups.i=email.i dups.i
  1148.   m=''
  1149.   DO j=1 TO WORDS(dups.i)
  1150.     x=OPEN(f,'Email/'name'/'WORD(dups.i,j),'R')
  1151.     IF x=0 THEN
  1152.       DO
  1153.         CALL usermsg('Email/'name'/'WORD(dups.i,j) 'failed to open for reading!')
  1154.         CALL waiting()
  1155.         RETURN
  1156.       END
  1157.     m=m||READCH(f,65000)||LF||LF
  1158.     CALL CLOSE(f)
  1159.     CALL DELETE('Email/'name'/'WORD(dups.i,j))
  1160.   END
  1161.   x=OPEN(f,'Email/'name'/'WORD(dups.i,1),'W')
  1162.   IF x=0 THEN
  1163.     DO
  1164.       CALL usermsg('Email/'name'/'WORD(dups.i,1) 'failed to open for writing!')
  1165.       CALL waiting()
  1166.       RETURN
  1167.     END
  1168.   CALL WRITECH(f,m)
  1169.   CALL CLOSE(f)
  1170. END
  1171. CALL sort_email()
  1172. CALL PostMsg()
  1173. CALL CloseWindow(QUICKHOST,'CONTINUE')
  1174. SIGNAL RESTART
  1175. RETURN
  1176.  
  1177.  
  1178. makepath:
  1179. PARSE ARG tdir,tfile
  1180. xx=RIGHT(tdir,1)
  1181. tpath=tdir
  1182. IF xx~=':' & xx~='/' THEN tpath=tpath'/'
  1183. tpath=tpath||tfile
  1184. RETURN tpath
  1185.  
  1186.  
  1187. read_ID:
  1188. CALL CLOSE(f)
  1189. x=OPEN(f,'.ID','R')
  1190. IF x=0 THEN
  1191.   DO
  1192.     CALL usermsg('.ID failed to open!')
  1193.     CALL waiting()
  1194.     RETURN
  1195.   END
  1196. id.=''
  1197. DO ii=1
  1198.   line=READLN(f)
  1199.   IF EOF(f) THEN LEAVE ii
  1200.   id.ii=line
  1201. END
  1202. id.0=ii-1
  1203. CALL CLOSE(f)
  1204. name=SUBSTR(id.1,8)
  1205. city=SUBSTR(id.2,8)
  1206. bbsname=SUBSTR(id.3,8)
  1207. bbsnym=STRIP(LEFT(COMPRESS(bbsname," '/:;."),12))
  1208. sysop=SUBSTR(id.4,8)
  1209. arcdate=SUBSTR(id.5,8)
  1210. keys=SUBSTR(id.6,8)
  1211. level=WORD(keys,2)
  1212. sysoplevel=WORD(keys,3)
  1213. x=makepath(prefs.3,'OUT')
  1214. arcdir=makepath(x,bbsnym)
  1215. CALL MAKEDIR(arcdir)
  1216. workdir=makepath(prefs.1,bbsnym)
  1217. CALL MAKEDIR(workdir)
  1218. CALL PRAGMA('D',workdir)
  1219. x=OPEN(f,'Friends','R')
  1220. IF x=0 THEN RETURN
  1221. DO ii=1
  1222.   line=READLN(f)
  1223.   IF EOF(f) THEN LEAVE ii
  1224.   friends.ii=line
  1225. END
  1226. CALL CLOSE(f)
  1227. friends.0=ii-1
  1228. RETURN
  1229.  
  1230.  
  1231. load_notices:
  1232. notices=SHOWDIR('Notices')
  1233. n=FIND(notices,'HELLO')
  1234. IF n>0 THEN notices=DELWORD(notices,n,1)
  1235. n=FIND(notices,'WELCOME')
  1236. IF n>0 THEN notices=DELWORD(notices,n,1)
  1237. n=FIND(notices,'GOODBYE')
  1238. IF n>0 & n<WORDS(notices) THEN notices=DELWORD(notices,n,1) 'Goodbye'
  1239. IF EXISTS('Notices/WELCOME') THEN notices='Welcome' notices
  1240. IF EXISTS('Notices/HELLO') THEN notices='Hello' notices
  1241. noticecount=1
  1242. IF notices='' THEN noticecount=0
  1243. RETURN
  1244.  
  1245.  
  1246. sort_email:
  1247. email.=''
  1248. emailcount=0
  1249. email=SHOWDIR('Email/'name)
  1250. email.0=WORDS(email)
  1251. IF email.0=0 THEN RETURN 1
  1252. email=sortnumbers(email)
  1253. DO i=1 TO WORDS(email)
  1254.   email.i=WORD(email,i)
  1255. END
  1256. IF emailcount>email.0 | emailcount<1 THEN emailcount=1
  1257. RETURN 0
  1258.  
  1259.  
  1260. read_QUICK:
  1261. CALL usermsg('Loading' modetext.mode'...')
  1262. tfile=modetext.mode
  1263. IF mode=0 THEN
  1264.   DO
  1265.     IF notices='' THEN CALL load_notices()
  1266.     IF notices='' THEN tfile=''
  1267.     ELSE tfile='Notices/'WORD(notices,noticecount)
  1268.   END
  1269. IF mode=1 THEN
  1270.   DO
  1271.     tfile=''
  1272.     IF DATATYPE(email.0,'W') & email.0>0 THEN
  1273.       DO
  1274.         DO WHILE emailcount<email.0 & email.emailcount=''
  1275.           emailcount=emailcount+1
  1276.         END
  1277.         tfile='Email/'name'/'email.emailcount
  1278.       END
  1279.     ELSE IF sort_email()=0 THEN
  1280.       DO
  1281.         tfile='Email/'name'/'email.1
  1282.         emailcount=1
  1283.       END
  1284.     ELSE emailcount=0
  1285.   END
  1286. IF mode=2 & DATATYPE(mess.0,'W') THEN
  1287.   DO
  1288.     messcount=1
  1289.     CALL nextitem('FORWARD')
  1290.     CALL PostMsg()
  1291.     RETURN
  1292.   END
  1293. IF tfile='' | ~EXISTS(tfile) THEN
  1294.   DO
  1295.     CALL PostMsg()
  1296.     CALL Move(QUICKHOST,220,100)
  1297.     CALL Text(QUICKHOST,'- No' modetext.mode 'Found -')
  1298.     RETURN
  1299.   END
  1300. text.=''
  1301. IF mode=2 THEN mess.=''
  1302. x=OPEN(f,tfile,'R')
  1303. IF x~=0 THEN
  1304.   DO i=1
  1305.     line=READLN(f)
  1306.     IF mode=2 THEN mess.i=line
  1307.     ELSE text.i=line
  1308.     IF EOF(f) THEN LEAVE i
  1309.   END
  1310. CALL CLOSE(f)
  1311. IF mode=2 THEN
  1312.   DO
  1313.     mess.0=i
  1314.     CALL parse_mess()
  1315.   END
  1316. ELSE
  1317.   DO
  1318.     text.0=i
  1319.     CALL show_QUICK(1)
  1320.   END
  1321. CALL PostMsg()
  1322. RETURN
  1323.  
  1324.  
  1325. show_QUICK:
  1326. ARG startline 
  1327. CALL SetAPen(QUICKHOST,0)
  1328. CALL RectFill(QUICKHOST,12,28,w.cols-12,w.rows-14)
  1329. CALL SetAPen(QUICKHOST,1)
  1330. CALL SetBPen(QUICKHOST,0)
  1331. IF startline+lines_per_page>text.0 THEN startline=text.0+1-lines_per_page
  1332. IF startline<1 THEN startline=1
  1333. DO i=1 TO lines_per_page
  1334.   ii=i-1+startline
  1335.   CALL Move(QUICKHOST,24,28+i*8)
  1336.   CALL Text(QUICKHOST,LEFT(text.ii,chars))
  1337.   IF searcharg='' THEN ITERATE i
  1338.   n=POS(searcharg,UPPER(text.ii))
  1339.   IF n=0 THEN ITERATE i
  1340.   CALL SetAPen(QUICKHOST,2)
  1341.   CALL SetBPen(QUICKHOST,1)
  1342.   CALL Move(QUICKHOST,16+8*n,28+i*8)
  1343.   CALL Text(QUICKHOST,searcharg)
  1344.   CALL SetAPen(QUICKHOST,1)
  1345.   CALL SetBPen(QUICKHOST,0)
  1346. END
  1347. lastline=startline+i-2
  1348. IF mode<3 THEN
  1349.   DO
  1350.     CALL SetAPen(QUICKHOST,1)
  1351.     CALL SetBPen(QUICKHOST,3)
  1352.     CALL Move(QUICKHOST,30,7)
  1353.     IF mode=0 THEN
  1354.       temp=noticecount'/'WORDS(notices) WORD(notices,noticecount)
  1355.     ELSE IF mode=2 THEN temp=messcount'/'WORDS(mess.0.1) WORD(mess.0.1,messcount)
  1356.     ELSE temp=emailcount'/'email.0 email.emailcount
  1357.     temp=LEFT(temp,74-LENGTH(STRIP(w.title)))
  1358.     CALL Text(QUICKHOST,temp)
  1359.   END
  1360. IF text.0=0 THEN temp=100
  1361. ELSE temp=((.005+lastline/text.0)*100)%1
  1362. IF temp>100 THEN temp=100
  1363. temp=RIGHT(temp,4)
  1364. CALL SetAPen(QUICKHOST,2)
  1365. CALL SetBPen(QUICKHOST,1)
  1366. CALL Move(QUICKHOST,w.cols-58,34)
  1367. CALL Text(QUICKHOST,temp'% ')
  1368. searcharg=''
  1369. RETURN
  1370.  
  1371.  
  1372. parse_mess:
  1373. CALL PostMsg()
  1374. CALL usermsg('Setting Up Message Conferences...')
  1375. mess.0.0=''
  1376. mess.0.1=''
  1377. DO i=1 TO mess.0
  1378.   conf=''
  1379.   IF LEFT(mess.i,1)='>' THEN ITERATE i
  1380.   PARSE VAR mess.i 'Entering' conf 'Message Conference..'
  1381.   IF conf='' THEN
  1382.     DO
  1383.       PARSE VAR mess.i '= Custom archived for' who .
  1384.       IF who='' THEN ITERATE i
  1385.       conf='Header'
  1386.     END
  1387.   mess.0.0=mess.0.0 i
  1388.   mess.0.1=mess.0.1 conf
  1389. END
  1390. messcount=1
  1391. CALL nextitem('FORWARD')
  1392. RETURN
  1393.  
  1394.  
  1395. filltext:
  1396. ARG top bot 
  1397. text.=''
  1398. DO i=top TO bot
  1399.   ii=1+i-top
  1400.   text.ii=mess.i
  1401. END
  1402. text.0=i-top
  1403. RETURN
  1404.  
  1405.  
  1406. page:
  1407. ARG direction
  1408. IF direction='UP' THEN temp=lastline
  1409. IF direction='BACK' THEN temp=lastline+2-2*lines_per_page
  1410. IF direction='ZIP' THEN
  1411.   DO
  1412.     IF lastline>lines_per_page THEN temp=1
  1413.     ELSE temp=text.0
  1414.   END
  1415. CALL show_QUICK(temp)
  1416. RETURN
  1417.  
  1418.  
  1419. line:
  1420. ARG direction
  1421. IF direction='UP' THEN temp=startline+1
  1422. IF direction='BACK' THEN temp=startline-1
  1423. CALL show_QUICK(temp)
  1424. RETURN
  1425.  
  1426.  
  1427. nextitem:
  1428. ARG direction 
  1429. IF mode=0 & notices~='' THEN
  1430.   DO
  1431.     IF direction='FORWARD' THEN noticecount=noticecount+1
  1432.     ELSE noticecount=noticecount-1
  1433.     IF noticecount>WORDS(notices) THEN noticecount=1
  1434.     IF noticecount<1 THEN noticecount=WORDS(notices)
  1435.     CALL read_QUICK()
  1436.   END
  1437. IF mode=1 & DATATYPE(email.0,'W') THEN
  1438.   DO
  1439.     IF direction='FORWARD' THEN emailcount=emailcount+1
  1440.     ELSE
  1441.       DO
  1442.         emailcount=emailcount-1
  1443.         DO WHILE emailcount>0 & email.emailcount=''
  1444.           emailcount=emailcount-1
  1445.         END
  1446.       END
  1447.     IF emailcount>email.0 THEN emailcount=1
  1448.     IF emailcount<1 THEN emailcount=email.0
  1449.     CALL read_QUICK()
  1450.   END
  1451. IF mode=2 & WORDS(mess.0.1)>0 THEN
  1452.   DO
  1453.     IF direction='FORWARD' THEN messcount=messcount+1
  1454.     ELSE messcount=messcount-1
  1455.     IF messcount>WORDS(mess.0.1) THEN messcount=1
  1456.     IF messcount<1 THEN messcount=WORDS(mess.0.1)
  1457.     a=WORD(mess.0.0,messcount)
  1458.     IF messcount=WORDS(mess.0.1) THEN b=mess.0+1
  1459.     ELSE b=WORD(mess.0.0,messcount+1)-1
  1460.     CALL filltext(a b)
  1461.     CALL show_QUICK(1)
  1462.   END
  1463. RETURN
  1464.  
  1465.  
  1466. sortnumbers: PROCEDURE
  1467. PARSE ARG slist
  1468. IF STRIP(slist)='' THEN RETURN ''
  1469. sorted.=''
  1470. oldest=999999
  1471. newest=0
  1472. newlist=''
  1473. DO si=1 TO WORDS(slist)
  1474.   testword=WORD(slist,si)
  1475.   IF ~DATATYPE(testword,'W') THEN
  1476.     DO
  1477.       testpos=LASTPOS('.',testword)
  1478.       IF testpos>0 THEN tempnum=SUBSTR(testword,testpos+1)
  1479.       ELSE
  1480.         DO
  1481.           newlist=testword newlist
  1482.           ITERATE si
  1483.         END
  1484.     END
  1485.   ELSE tempnum=testword/1
  1486.   IF sorted.tempnum='' THEN
  1487.     DO
  1488.       sorted.tempnum=testword
  1489.       sorted.tempnum.0=1
  1490.       IF DATATYPE(tempnum,'W') THEN
  1491.         DO
  1492.           IF tempnum>newest THEN newest=tempnum
  1493.           IF tempnum<oldest THEN oldest=tempnum
  1494.         END
  1495.     END
  1496.   ELSE newlist=newlist testword
  1497. END
  1498. IF oldest~=999999 & newest~=0 THEN
  1499.   DO si=oldest TO newest
  1500.     IF sorted.si.0=1 THEN newlist=newlist sorted.si
  1501.   END
  1502. RETURN STRIP(newlist)
  1503.  
  1504.  
  1505. whichmode:
  1506. ARG test 
  1507. IF test=1 THEN mode=mode+1
  1508. IF mode>5 THEN mode=0
  1509. CALL CloseWindow(QUICKHOST,CONTINUE)
  1510. SIGNAL RESTART
  1511. RETURN;
  1512.  
  1513.  
  1514. boxes:
  1515. CALL box(QUICKHOST,1,1,11,27,w.cols-22,w.rows-40)
  1516. RETURN
  1517.  
  1518.  
  1519. box:
  1520. ARG host,pen1,pen2,upleft,uptop,width,height
  1521. CALL SetAPen(host,pen2)
  1522. CALL Move(host,upleft+width+1,uptop)
  1523. CALL Draw(host,upleft+width+1,uptop+height)
  1524. CALL Draw(host,upleft-1,uptop+height)
  1525. CALL Move(host,upleft+width,uptop+1)
  1526. CALL Draw(host,upleft+width,uptop+height)
  1527. CALL SetAPen(host,pen1)
  1528. CALL Move(host,upleft,uptop)
  1529. CALL Draw(host,upleft+width,uptop)
  1530. CALL Move(host,upleft,uptop+height-1)
  1531. CALL Draw(host,upleft,uptop)
  1532. CALL Move(host,upleft-1,uptop)
  1533. CALL Draw(host,upleft-1,uptop+height)
  1534. RETURN
  1535.  
  1536.  
  1537. usermsg:
  1538. PARSE ARG umsg
  1539. umsg=STRIP(LEFT(umsg,74))
  1540. CALL PostMsg()
  1541. IF ScreenCols(QUICKSCREEN)>0 THEN
  1542.   CALL PostMsg((w.cols-40-LENGTH(umsg)*8)%2,60,umsg,QUICKSCREEN)
  1543. ELSE SAY umsg
  1544. RETURN
  1545.  
  1546.  
  1547. waiting:
  1548. CALL DELAY(150)
  1549. CALL PostMsg()
  1550. RETURN
  1551.  
  1552.  
  1553. info:
  1554. infotext=        '     User:' name'\'
  1555. infotext=infotext'     City:' city'\\'
  1556. infotext=infotext'      BBS:' bbsname'\'
  1557. infotext=infotext'    SysOp:' sysop'\'
  1558. infotext=infotext'     Keys:' keys'\'
  1559. temp=arcfile
  1560. IF temp='ARCFILE' | temp='' THEN temp='QUICK_'WORD(keys,1)'.lha'
  1561. ELSE
  1562.   DO
  1563.     n=LASTPOS('/',temp)
  1564.     IF n=0 THEN n=LASTPOS(':',temp)
  1565.     IF n>0 THEN temp=SUBSTR(temp,n+1)
  1566.   END
  1567. infotext=infotext'  Arcfile:' temp'\'
  1568. infotext=infotext' Archived:' arcdate'\\'
  1569. infotext=infotext'KickStart:' ksversion'\'
  1570. infotext=infotext'WorkBench:' wbversion'\\'
  1571. infotext=infotext'   Memory:' comma(STORAGE()) 'bytes free.'
  1572. CALL Request(170,45,infotext,,,,QUICKSCREEN)
  1573. RETURN
  1574.  
  1575.  
  1576. set_colors:
  1577. ARG host
  1578. IF prefs.0='' THEN prefs.0='10 10 10 0 0 0 15 15 15 12 8 8'
  1579. CALL SetRGB4(host,0,WORD(prefs.0,1),WORD(prefs.0,2),WORD(prefs.0,3))
  1580. CALL SetRGB4(host,1,WORD(prefs.0,4),WORD(prefs.0,5),WORD(prefs.0,6))
  1581. CALL SetRGB4(host,2,WORD(prefs.0,7),WORD(prefs.0,8),WORD(prefs.0,9))
  1582. CALL SetRGB4(host,3,WORD(prefs.0,10),WORD(prefs.0,11),WORD(prefs.0,12))
  1583. RETURN
  1584.  
  1585.  
  1586. tofront:
  1587. ARG host
  1588. CALL set_colors(host)
  1589. CALL ActivateWindow(host)
  1590. CALL ScreenToFront(QUICKSCREEN)
  1591. RETURN
  1592.  
  1593.  
  1594. getnames:
  1595. PARSE ARG tdir,tfile,ptext
  1596. x=GetFile(150,16,tdir,tfile,ptext,QUICKSCREEN)
  1597. RETURN x
  1598.  
  1599.  
  1600. getdir:
  1601. PARSE ARG full .
  1602. IF full='' THEN RETURN ''
  1603. n=LASTPOS('/',full)
  1604. IF n=0 THEN n=LASTPOS(':',full)
  1605. IF n=0 THEN tdir=''
  1606. ELSE
  1607.   DO
  1608.     tdir=LEFT(full,n)
  1609.     IF RIGHT(tdir,1)='/' THEN tdir=LEFT(tdir,n-1)
  1610.   END
  1611. RETURN tdir
  1612.  
  1613.  
  1614. getfilename:
  1615. PARSE ARG full .
  1616. IF full='' THEN RETURN ''
  1617. n=LASTPOS('/',full)
  1618. IF n=0 THEN n=LASTPOS(':',full)
  1619. IF n=0 THEN tfile=full
  1620. ELSE tfile=SUBSTR(full,n+1)
  1621. tfile=COMPRESS(tfile,' ,;|#?*')  /* be sure no illegals here */
  1622. RETURN tfile
  1623.  
  1624.  
  1625. config:
  1626. ARG action .
  1627. IF action='LOAD' THEN
  1628.   DO
  1629.     x=getnames(prefsdir,prefsfile,'Load Preferences File ')
  1630.     IF x='' THEN RETURN 1
  1631.     prefsdir=getdir(x)
  1632.     prefsfile=getfilename(x)
  1633.     CALL get_prefs()
  1634.     CALL set_colors(QUICKHOST)
  1635.     CALL CloseWindow(QUICKHOST,'CONTINUE')
  1636.     IF p.title='' THEN SIGNAL RESTART
  1637.     ELSE SIGNAL START_PREFS
  1638.   END
  1639. IF action='SAVE' THEN
  1640.   DO
  1641.     x=getnames(prefsdir,prefsfile,'Save Preferences File ')
  1642.     IF x='' THEN RETURN 2
  1643.     prefsdir=getdir(x)
  1644.     prefsfile=getfilename(x)
  1645.     CALL save_prefs()
  1646.   END
  1647. IF action='SET' THEN
  1648.   DO
  1649.     CALL CloseWindow(QUICKHOST,'CONTINUE')
  1650.     SIGNAL START_PREFS
  1651.   END
  1652. RETURN 0
  1653.  
  1654.  
  1655. get_prefs:
  1656. prefspath=makepath(prefsdir,prefsfile)
  1657. x=OPEN(f,prefspath,'R')
  1658. IF x=0 THEN
  1659.   DO
  1660.     CALL usermsg(prefspath 'failed to open!')
  1661.     CALL waiting()
  1662.     RETURN
  1663.   END
  1664. prefs.=''
  1665. DO i=0 TO 9
  1666.   prefs.i=READLN(f)
  1667. END
  1668. CALL CLOSE(f)
  1669. CALL MAKEDIR(prefs.1)
  1670. CALL MAKEDIR(prefs.2)
  1671. CALL MAKEDIR(prefs.3)
  1672. CALL PRAGMA('D',prefs.1)
  1673. arcdir=makepath(prefs.3,'OUT')
  1674. CALL MAKEDIR(arcdir)
  1675. CALL LOADSIG()
  1676. laceflag=0
  1677. IF prefs.6=1 THEN laceflag=1
  1678. ELSE prefs.6=0
  1679. RETURN
  1680.  
  1681.  
  1682. /* Modification to support signature files S.Griffiths 01/08/94 */
  1683. LOADSIG:
  1684. sig.=''
  1685. sig.0=0 /* Set as a flag for later on (0 = no signature, ~0 = signature) */
  1686. IF prefs.5~='' THEN /* If the prefered name of sigfile is not blank */
  1687.   DO
  1688.     i=1
  1689.     if EXISTS(prefs.5) THEN
  1690.       DO
  1691.         x=OPEN(f,prefs.5,'R') /* Open the signature file */
  1692.         IF x=0 THEN
  1693.           DO
  1694.             CALL usermsg(prefs.5 'failed to open!')
  1695.             CALL waiting()
  1696.             RETURN
  1697.           END
  1698.         /* Read the signature file */
  1699.         DO UNTIL EOF(f)
  1700.           sig.i=READLN(f)
  1701.           i=i+1
  1702.         END
  1703.         CALL CLOSE(f)
  1704.         sig.0=i-1 /* if there was no signature file,or it was empty i = 0 */
  1705.       END
  1706.   END
  1707. RETURN
  1708.  
  1709.  
  1710. /* Routine to add the signature to a text file S.Griffiths 3/8/94 */
  1711. INSERTSIG:
  1712. PARSE ARG filename
  1713. IF sig.0~=0 THEN /* if there is a signature to add */
  1714.   DO
  1715.     IF Request(,90,'Place Signature In Message?',,' YES ',' NO ',QUICKSCREEN)='OKAY' THEN
  1716.       DO
  1717.         IF ~EXISTS(filename) THEN x=OPEN(f,filename,'W')
  1718.         ELSE x=OPEN(f,filename,'A')
  1719.         IF x=0 THEN
  1720.           DO
  1721.             CALL usermsg(filename 'failed to open for writing!')
  1722.             CALL waiting()
  1723.           END
  1724.         ELSE
  1725.           DO i=1 TO sig.0
  1726.             CALL WRITELN(f,sig.i)
  1727.           END
  1728.         CALL CLOSE(f)
  1729.       END
  1730.   END
  1731. RETURN
  1732.  
  1733.  
  1734. edit_request:
  1735. CALL FileList(arcdir'/???.HDR',hdrs)
  1736. text.=''
  1737. DO i=1 TO hdrs.0
  1738.   IF OPEN(f,hdrs.i,'R')=0 THEN ITERATE i
  1739.   line=READLN(f)
  1740.   type=STRIP(WORD(line,1))
  1741.   line=READLN(f)
  1742.   IF type~='File:' THEN line=READLN(f)
  1743.   text.i=RIGHT(i,2) RIGHT(type,5) WORD(line,2)
  1744.   If type~='File:' THEN
  1745.     DO
  1746.       line=READLN(f)
  1747.       text.i=text.i '-' STRIP(SUBSTR(line,8))
  1748.     END
  1749.   CALL CLOSE(f)
  1750. END
  1751. text.0=hdrs.0
  1752. IF EXISTS(arcdir'/File_Requests') THEN
  1753.   DO
  1754.     i=text.0+1
  1755.     text.0=i
  1756.     text.i=i 'File_Requests'
  1757.   END
  1758. IF EXISTS(arcdir'/File_Deletes') THEN
  1759.   DO
  1760.     i=text.0+1
  1761.     text.0=i
  1762.     text.i=i 'File_Deletes'
  1763.   END
  1764. IF text.0=0 THEN
  1765.   DO
  1766.     CALL usermsg('- No Requests pending -')
  1767.     CALL waiting()
  1768.     RETURN
  1769.   END
  1770. IF ksversion>36 THEN
  1771.   DO
  1772.     fil=RequestList(1,text.0,text,50,20,w.cols-100,w.rows-40,QUICKSCREEN)
  1773.     num=WORD(fil,1)
  1774.   END
  1775. ELSE
  1776.   DO
  1777.     CALL show_QUICK(1)
  1778.     num=Request(380,115,'Select Request by NUMBER','',,' CANCEL ',QUICKSCREEN)
  1779.   END
  1780. IF ~DATATYPE(num,'W') THEN RETURN
  1781. efile=LEFT(hdrs.num,LENGTH(hdrs.num)-3)
  1782. IF WORD(text.num,2)='File_Requests' THEN CALL editor(arcdir'/File_Requests')
  1783. ELSE IF WORD(text.num,2)='File_Deletes' THEN CALL editor(arcdir'/File_Deletes')
  1784. ELSE IF Request(,90,'Edit or Kill this Request?',,' EDIT ',' KILL ',QUICKSCREEN)='OKAY' THEN
  1785.   CALL editor(efile'TXT')
  1786. ELSE
  1787.   DO
  1788.     CALL DELETE(efile'HDR')
  1789.     CALL DELETE(efile'TXT')
  1790.     IF WORD(text.num,2)='File:' THEN CALL DELETE(arcdir'/Files/'WORD(text.num,3))
  1791.     CALL usermsg('Request' num 'deleted')
  1792.     CALL waiting()
  1793.   END
  1794. RETURN
  1795.  
  1796.  
  1797. edit_sig:
  1798. sigdir=getdir(prefs.5)
  1799. IF sigdir='' THEN sigdir=prefsdir
  1800. sfile=getfilename(prefs.5)
  1801. IF sfile='' THEN sfile=sigfile
  1802. x=getnames(sigdir,sfile,'Create/Edit Signature File ')
  1803. IF x='' THEN RETURN
  1804. prefs.5=x
  1805. CALL editor(prefs.5)
  1806. CALL CloseWindow(QUICKHOST,'CONTINUE')
  1807. SIGNAL START_PREFS
  1808. RETURN
  1809.  
  1810.  
  1811. new_colors:
  1812. col=''
  1813. DO i=0 TO 3
  1814.   col=col ScreenColor(QUICKSCREEN,i)
  1815. END
  1816. RETURN STRIP(col)
  1817.  
  1818.  
  1819. save_prefs:
  1820. prefspath=makepath(prefsdir,prefsfile)
  1821. x=OPEN(f,prefspath,'W')
  1822. IF x=0 THEN
  1823.   DO
  1824.     CALL usermsg(prefspath 'failed to open!')
  1825.     CALL waiting()
  1826.     RETURN
  1827.   END
  1828. prefs.0=new_colors()
  1829. DO i=0 TO 9
  1830.   CALL WRITELN(f,prefs.i)
  1831. END
  1832. CALL CLOSE(f)
  1833. RETURN
  1834.  
  1835.  
  1836. comma:
  1837. NUMERIC DIGITS 14     /* largest number of digits ARexx can handle */
  1838. ARG num .
  1839. mant = num - num%1  /* anything to the right of the decimal point? */
  1840. IF mant = 0 THEN mant = ''
  1841. ELSE
  1842.   DO
  1843.     mant = SUBSTR(mant,2)       /* if yes, then remove leading "0" */
  1844.     num = num % 1                      /* make num into an integer */
  1845.   END
  1846. dgt = LENGTH(num)                       /* number of digits in num */
  1847. numtext = ''
  1848. IF dgt>3 THEN numtext = ','RIGHT(num,3)
  1849. IF dgt>6 THEN numtext = ','LEFT(RIGHT(num,6),3)||numtext
  1850. IF dgt>9 THEN numtext = ','LEFT(RIGHT(num,9),3)||numtext
  1851. IF dgt>12 THEN
  1852.   DO
  1853.     numtext = ','LEFT(RIGHT(num,12),3)||numtext
  1854.     numtext = LEFT(num,dgt-12)||numtext
  1855.   END
  1856. ELSE IF dgt>9 THEN numtext = LEFT(num,dgt-9)||numtext
  1857. ELSE IF dgt>6 THEN numtext = LEFT(num,dgt-6)||numtext
  1858. ELSE IF dgt>3 THEN numtext = LEFT(num,dgt-3)||numtext
  1859. ELSE numtext = num
  1860. numtext = numtext||mant          /* replace any decimal point data */
  1861. RETURN numtext
  1862.  
  1863.  
  1864. getversions:
  1865. ADDRESS COMMAND 'version >RAM:VERSION'
  1866. x=OPEN(f,'RAM:VERSION','R')
  1867. line=READLN(f)
  1868. CALL CLOSE(f)
  1869. CALL DELETE('RAM:VERSION')
  1870. wbversion=WORD(line,4)
  1871. IF ~DATATYPE(wbversion,'N') THEN
  1872.   DO
  1873.     wbversion=WORD(line,6)
  1874.     ksversion=WORD(line,3)
  1875.   END
  1876. ELSE ksversion=WORD(line,2)
  1877. IF RIGHT(ksversion,1)=',' THEN ksversion=LEFT(ksversion,LENGTH(ksversion)-1)
  1878. RETURN
  1879.  
  1880.  
  1881. setup:
  1882. CALL reset_vars()
  1883. CALL OPENPORT('QUICKPORT')
  1884. modetext.=''
  1885. modetext.0='Notices'
  1886. modetext.1='EMail'
  1887. modetext.2='Messages'
  1888. modetext.3='Conferences'
  1889. modetext.4='FileList'
  1890. modetext.5='Libraries'
  1891. startline=1
  1892. CALL getversions()
  1893. prefsdir='s:'
  1894. sigfile='bbsQUICK.sig'
  1895. prefsfile='bbsQUICK.prefs'
  1896. prefspath=makepath(prefsdir,prefsfile)
  1897. IF EXISTS(prefspath) & resetflag THEN CALL get_prefs()
  1898. ELSE
  1899.   DO
  1900.     prefs.1='RAM:Q'
  1901.     CALL MAKEDIR(prefs.1)
  1902.     CALL PRAGMA('D',prefs.1)
  1903.     arcdir=makepath(prefs.3,'OUT')
  1904.     CALL MAKEDIR(arcdir)
  1905.   END
  1906. x=SOURCELINE(1)
  1907. prgversion=''
  1908. DO i=3 TO 4
  1909.   prgversion=STRIP(prgversion WORD(x,i))
  1910. END
  1911. abouttext=CENTER(prgversion,32)'\\
  1912.   © 1993 Richard Lee Stockton\
  1913.      Voice:   206-776-1253\
  1914.        FAX:   206-775-7573\
  1915.        BBS:   206-744-1254\\
  1916.       FREELY DISTRIBUTABLE\
  1917.  AS LONG AS THIS NOTICE REMAINS'
  1918. prefshelp='
  1919.       Work Dir => This is the directory where the QUICK_ archive\
  1920. will be decompressed, and from which the data files then will be read.\\
  1921.   Download Dir => This should be your terminal program''s download\
  1922. directory where the QUICK_ archive (from the BBS to you) can be located.\\
  1923.     Upload Dir => This should be your terminal program''s upload\
  1924. directory where the QUICKIN archive (from you to the BBS) can be built.\
  1925. Make sure it is located somewhere other than RAM: so that data won''t\
  1926. be lost if the power goes off! A directory called OUT is made here and\
  1927. the OUTgoing (back to BBS) files are stored here for later archival.\\
  1928.         Editor => Your choice of editor. Memacs works well, as does Ed.\\
  1929. Signature File => This should be the name of your signature file that\
  1930. can be used to personalise your E-Mail and Messages.'
  1931. LF='0A'x
  1932. FF='0C'x
  1933. QT='22'x
  1934. ADDRESS AREXX  "'x=createhost(QUICKHOST,QUICKPORT,QUICKSCREEN)'"
  1935. DO 200 WHILE ~SHOW('Ports','QUICKHOST')
  1936.   CALL DELAY 10  /* 200 ms */
  1937. END
  1938. IF ~SHOW('Ports','QUICKHOST') THEN
  1939.   CALL ALL_DONE('Could not open host QUICKHOST.')
  1940. s.=''
  1941. s.modes='HIRES'
  1942. IF laceflag THEN s.modes='HIRES+LACE'
  1943. s.title=prgversion'   -   BBBBS OffLine Read/Reply Module'
  1944. IF ScreenRows(QUICKSCREEN)>0 THEN RETURN
  1945. IF OpenScreen(,2,s.modes,s.title,QUICKSCREEN)=0 THEN
  1946.   CALL ALL_DONE('Error!  Could not open bbsQUICK screen... Exiting.')
  1947. w.=''
  1948. w.cols=ScreenCols(QUICKSCREEN)
  1949. w.rows=ScreenRows(QUICKSCREEN)-1
  1950. /* w.cols=640; w.rows=200 */
  1951. lines_per_page=(w.rows-43)%8
  1952. chars=(w.cols-48)%8
  1953. w.idcmp='CLOSEWINDOW+MENUPICK+GADGETUP'
  1954. w.flags='WINDOWCLOSE+ACTIVATE'
  1955. RETURN
  1956.  
  1957. /* bbsQUICK.rexx */
  1958.